#ifndef SYSTEMCONFIGDIALOG_H
#define SYSTEMCONFIGDIALOG_H

#include <QDialog>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLabel>
#include <QSpinBox>
#include <QDoubleSpinBox>
#include <QCheckBox>
#include <QPushButton>
#include <QGroupBox>
#include <QLineEdit>
#include <QSlider>
#include <QComboBox>
#include <QTextEdit>
#include <QFileDialog>
#include <QMessageBox>
#include <QProgressBar>
#include <QTimer>
#include <QGroupBox>
#include "systemconfig.h"

// 前向声明
class QFileInfo;
class QStorageInfo;

/**
 * 重构后的系统配置对话框
 * 重构原则：简化接口，用策略选择替代技术参数
 * Martin Fowler: Replace Parameter with Explicit Methods
 */
class SystemConfigDialog : public QDialog
{
    Q_OBJECT

public:
    explicit SystemConfigDialog(QWidget* parent = nullptr);
    ~SystemConfigDialog();

    // 获取和设置配置 (新的配置结构)
    SystemConfig getConfig() const;
    void setConfig(const SystemConfig& config);

    // 保存和加载配置
    void saveConfig();
    void loadConfig();

signals:
    void configChanged(const SystemConfig& config);

private slots:
    void onResetToDefaults();
    void onBrowseCacheDirectory();
    void onBrowseOutputDirectory();
    void onMemoryStrategyChanged(int index);
    void onProcessingQualityChanged(int index);
    void onSpaceThresholdChanged(int value);
    void onOkClicked();

    // 实时更新槽函数
    void updateMemoryInfo();
    void updateStorageInfo();
    void updateEstimatedSpace();

private:
    void setupUI();
    void setupPerformanceGroup();
    void setupStorageGroup();
    void setupLayoutGroup();
    void connectSignals();
    void updateUI();
    void validateConfig();

    // 实时反馈方法
    void updateMemoryUsageDisplay();
    void updateSpaceUsageDisplay();
    void updateRecommendations();

    // === UI组件 (简化后的单页面设计) ===
    QVBoxLayout* m_mainLayout;

    // 性能设置组
    QGroupBox* m_performanceGroup;
    QComboBox* m_memoryStrategyCombo;
    QLabel* m_memoryInfoLabel;
    QComboBox* m_processingQualityCombo;
    QLabel* m_qualityInfoLabel;

    // 存储设置组
    QGroupBox* m_storageGroup;
    QLineEdit* m_cacheDirectoryEdit;
    QPushButton* m_browseCacheButton;
    QLabel* m_cacheSpaceLabel;
    QLineEdit* m_outputDirectoryEdit;
    QPushButton* m_browseOutputButton;
    QSpinBox* m_spaceThresholdSpinBox;
    QLabel* m_spaceWarningLabel;

    // 布局设置组
    QGroupBox* m_layoutGroup;
    QComboBox* m_pdfLayoutCombo;
    QComboBox* m_imageLayoutCombo;

    // 信息显示区域
    QGroupBox* m_infoGroup;
    QTextEdit* m_systemInfoText;

    // 按钮
    QHBoxLayout* m_buttonLayout;
    QPushButton* m_resetButton;
    QPushButton* m_okButton;

    // 定时器
    QTimer* m_updateTimer;

    // 数据
    SystemConfig m_config;
    bool m_configChanged;
};

#endif // SYSTEMCONFIGDIALOG_H
